package com.info.zhiduoduo.repository.util;

import com.info.zhiduoduo.repository.dto.crowdsource.CrowdsourceItemAmountCalcResult;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 限额提示语
 * @author tianyonghong
 * @create 2022/12/8
 */
public class LimitPromptUtil {
    //城市限额提示语：
    //创客已超单笔限额
    //创客已超注册地月度限额
    //创客已超注册地季度限额
    //创客已超注册地年度限额
    //
    //企业限额提示语：
    //创客已超单笔限额
    //创客已超企业月度限额
    //创客已超企业季度限额
    //创客已超企业年度限额
    //
    //创客限额提示语：
    //创客已超单笔限额
    //创客已超月度限额
    //创客已超季度限额
    //创客已超年度限额
    //创客已超年度最高限额
    //创客连续12个月累计交易已超限额

    /**
     * 根据限额返回提示语
     * {@link com.info.zhiduoduo.repository.dto.crowdsource.CrowdsourceItemAmountCalcResult}
     * @param userType 用户类型 1:自然人 2:创客
     * @param makerExceedType 超过的类型：0：无 1:系统 2：企业 3：创客 4：开户地 5：个人所有业务
     * @param makerExceedPeriod 超过的时间周期：0：无 1：过去12个月 2：年 3：季度 4：月 5：单笔
     * @param singleExceed  单笔项目是否超过限额
     * @param monthlyExceed 月度总综合费用是否已经超过限额
     * @param quarterlyExceed 季度总综合费用是否已经超过限额
     * @param yearlyExceed 年度综合费用是否已经超过限额
     * @return
     */
    public static String getExceedStr(int userType,
                                      int makerExceedType, int makerExceedPeriod,
                                     boolean singleExceed,
                                     boolean monthlyExceed,
                                     boolean quarterlyExceed,
                                     boolean yearlyExceed) {
//        String userTypeStr = userType == 1 ? "自然人" : "创客";

        if (makerExceedType != 0 || makerExceedPeriod != 0) {
            if (makerExceedType == 1) {
                return "已超年度最高限额";
            } else {
                if (makerExceedPeriod == 1) {
                    if(makerExceedType == 2){
                        return "已超连续12个月累计交易限额";
                    } else if(makerExceedType == 5){
                        return "已超个人连续12个月交易限额";
                    }
                } else if (makerExceedPeriod == 2) {
                    if (makerExceedType == 2) {
                        return "已超企业年度限额";
                    } else if (makerExceedType == 3) {
                        return "已超年度限额";
                    } else if (makerExceedType == 4) {
                        return "已超注册地年度限额";
                    }  else if (makerExceedType == 5) {
                        return "已超个人全年交易限额";
                    } else {
                        return "已超年度限额";
                    }
                } else if (makerExceedPeriod == 3) {
                    if (makerExceedType == 2) {
                        return "已超企业季度限额";
                    } else if (makerExceedType == 3) {
                        return  "已超季度限额";
                    } else if (makerExceedType == 4) {
                        return "已超注册地季度限额";
                    } else {
                        return "已超季度限额";
                    }
                } else if (makerExceedPeriod == 4) {
                    if (makerExceedType == 2) {
                        return "已超企业月度限额";
                    } else if (makerExceedType == 3) {
                        return "已超月度限额";
                    } else if (makerExceedType == 4) {
                        return "已超注册地月度限额";
                    } else {
                        return "已超月度限额";
                    }
                } else if (makerExceedPeriod == 5) {
                    return "已超单笔限额";
                } else {
                    return "已超限额";
                }
            }
        }
        if (singleExceed) {
            return "已超注册地单笔限额";
        }
        if (monthlyExceed) {
            return "已超注册地月度限额";
        }
        if (quarterlyExceed) {
            return "已超注册地季度限额";
        }
        if (yearlyExceed) {
            return "已超注册地年度限额";
        }
        return "";
    }

    /**
     * 对限额校验的返回值提示处理成list
     * @param itemAmountCalcList
     * @return
     */
    public static List<CrowdsourceItemAmountCalcResult> checkExceedList(List<CrowdsourceItemAmountCalcResult> itemAmountCalcList){
        return itemAmountCalcList.stream().filter(itemAmountCalc -> {
            //设置提示语
            itemAmountCalc.setExceedTip(LimitPromptUtil.getExceedStr(
                    itemAmountCalc.getUserType(),
                    itemAmountCalc.getMakerExceedType(),
                    itemAmountCalc.getMakerExceedPeriod(),
                    itemAmountCalc.isSingleExceed(), itemAmountCalc.isMonthlyExceed(),
                    itemAmountCalc.isQuarterlyExceed(), itemAmountCalc.isYearlyExceed()));
            if (itemAmountCalc.getMakerExceedType() != 0 || itemAmountCalc.getMakerExceedPeriod() != 0) {
                // 表示众包创客限额超过了，过滤掉
                return true;
            }
            // 单笔限额
            if (itemAmountCalc.isSingleExceed()) return true;
            // 月度限额
            if (itemAmountCalc.isMonthlyExceed()) return true;
            // 季度限额
            if (itemAmountCalc.isQuarterlyExceed()) return true;
            // 年度限额
            if (itemAmountCalc.isYearlyExceed()) return true;
            // 都满足, 不过滤
            return false;
        }).collect(Collectors.toList());

    }
}
